/**
 * 腾讯地图配置管理工具
 */

// 默认配置
const DEFAULT_CONFIG = {
  apiKey: '',
  libraries: 'visualization,geometry,vector,tools',
  center: {
    lat: 39.908823,
    lng: 116.397470
  },
  zoom: 12,
  minZoom: 3,
  maxZoom: 20
}

// 环境变量配置映射
const ENV_CONFIG_MAP = {
  VITE_TENCENT_MAP_API_KEY: 'apiKey',
  VITE_TENCENT_MAP_LIBRARIES: 'libraries'
}

/**
 * 获取地图配置
 * @param {Object} customConfig - 自定义配置
 * @returns {Object} - 合并后的配置
 */
export function getMapConfig(customConfig = {}) {
  // 从环境变量读取配置
  const envConfig = getEnvConfig()
  
  // 合并配置：默认配置 < 环境变量配置 < 自定义配置
  const config = {
    ...DEFAULT_CONFIG,
    ...envConfig,
    ...customConfig
  }
  
  // 验证必要配置
  validateConfig(config)
  
  return config
}

/**
 * 从环境变量获取配置
 * @returns {Object} - 环境变量配置
 */
function getEnvConfig() {
  const envConfig = {}
  
  Object.entries(ENV_CONFIG_MAP).forEach(([envKey, configKey]) => {
    const envValue = import.meta.env[envKey]
    if (envValue) {
      envConfig[configKey] = envValue
    }
  })
  
  return envConfig
}

/**
 * 验证配置的有效性
 * @param {Object} config - 要验证的配置
 * @throws {Error} - 配置无效时抛出错误
 */
function validateConfig(config) {
  const errors = []
  
  // 验证API密钥
  if (!config.apiKey) {
    errors.push('API密钥不能为空')
  } else if (typeof config.apiKey !== 'string') {
    errors.push('API密钥必须是字符串')
  }
  
  // 验证中心点坐标
  if (!config.center || typeof config.center !== 'object') {
    errors.push('中心点坐标配置无效')
  } else {
    if (typeof config.center.lat !== 'number' || config.center.lat < -90 || config.center.lat > 90) {
      errors.push('纬度必须是-90到90之间的数字')
    }
    if (typeof config.center.lng !== 'number' || config.center.lng < -180 || config.center.lng > 180) {
      errors.push('经度必须是-180到180之间的数字')
    }
  }
  
  // 验证缩放级别
  if (typeof config.zoom !== 'number' || config.zoom < 1 || config.zoom > 20) {
    errors.push('缩放级别必须是1到20之间的数字')
  }
  
  if (typeof config.minZoom !== 'number' || config.minZoom < 1 || config.minZoom > 20) {
    errors.push('最小缩放级别必须是1到20之间的数字')
  }
  
  if (typeof config.maxZoom !== 'number' || config.maxZoom < 1 || config.maxZoom > 20) {
    errors.push('最大缩放级别必须是1到20之间的数字')
  }
  
  if (config.minZoom >= config.maxZoom) {
    errors.push('最小缩放级别必须小于最大缩放级别')
  }
  
  if (errors.length > 0) {
    throw new Error(`地图配置验证失败：\n${errors.join('\n')}`)
  }
}

/**
 * 创建地图配置对象
 * @param {Object} options - 配置选项
 * @returns {Object} - 标准化的地图配置
 */
export function createMapConfig(options = {}) {
  try {
    return getMapConfig(options)
  } catch (error) {
    console.error('地图配置创建失败:', error.message)
    throw error
  }
}

/**
 * 获取API密钥诊断信息
 * @param {string} apiKey - API密钥
 * @returns {Object} - 诊断结果
 */
export function diagnoseApiKey(apiKey) {
  const result = {
    isValid: false,
    issues: [],
    suggestions: []
  }
  
  if (!apiKey) {
    result.issues.push('API密钥为空')
    result.suggestions.push('请在腾讯位置服务控制台获取API密钥')
    return result
  }
  
  if (typeof apiKey !== 'string') {
    result.issues.push('API密钥类型错误')
    result.suggestions.push('API密钥必须是字符串类型')
    return result
  }
  
  // 检查格式
  const expectedFormat = /^[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{4}$/
  if (!expectedFormat.test(apiKey)) {
    result.issues.push('API密钥格式不正确')
    result.suggestions.push('API密钥应该是XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXX格式')
    return result
  }
  
  result.isValid = true
  return result
}

/**
 * 获取配置帮助信息
 * @returns {Object} - 帮助信息
 */
export function getConfigHelp() {
  return {
    apiKey: {
      description: '腾讯地图API密钥',
      required: true,
      format: 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXX',
      howToGet: '在腾讯位置服务控制台(https://lbs.qq.com/console/)申请'
    },
    libraries: {
      description: '需要加载的地图库',
      required: false,
      default: 'visualization,geometry,vector,tools',
      options: ['visualization', 'geometry', 'vector', 'tools', 'drawing']
    },
    center: {
      description: '地图中心点坐标',
      required: false,
      default: '北京市中心 (39.908823, 116.397470)',
      format: '{ lat: number, lng: number }'
    },
    zoom: {
      description: '地图缩放级别',
      required: false,
      default: 12,
      range: '1-20'
    }
  }
}

// 导出默认配置
export { DEFAULT_CONFIG }